﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
//librerias especiales para la BD
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Data.OleDb;

namespace CityGames
{
    public class CADNoticia
    {
        static private string cadConexion = System.Configuration.ConfigurationManager.ConnectionStrings["CityGames.Properties.Settings.BDCityGamesConnectionString"].ConnectionString;


        /*_____________________________________Métodos Javi_________________________________________*/
        /// <summary>
        /// Funcion para obtener los datos de la Base de Datos
        /// </summary>
        /// <param name="select">
        /// Select que vamos a ejecutar</param>
        /// <param name="nombreTabla">
        /// Número de la tabla que vamos a atacar</param>
        /// <returns>
        /// Datos de la Noticia en un DataSet</returns>
        public DataSet ObtenerDatos(string select, string nombreTabla)
        {
            DataSet resultado = new DataSet();

            try
            {
                SqlConnection conexion = new SqlConnection(cadConexion);
                SqlDataAdapter da = new SqlDataAdapter(select, conexion);
                da.Fill(resultado, nombreTabla);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return resultado;
        }

        /// <summary>
        /// Funcion para rellenar los datos de una noticia a partir de su id
        /// </summary>
        /// <param name="idNoticia">
        /// Número de la noticia de la que desea rellenar los datos</param>
        /// <param name="titulo">
        /// Titulo de la noticia</param>
        /// <param name="subtitulo">
        /// Subtitulo de la noticia</param>
        /// <param name="plataforma">
        /// Plataforma de la noticia</param>
        /// <param name="juego">
        /// Juego de la noticia</param>
        /// <param name="idCreador">
        /// Creador de la noticia</param>
        /// <param name="fechaReg">
        /// Fecha de registro de la noticia</param>
        /// <returns>
        /// Devuelve los datos de la noticia en sus parametros por referencia</returns>
        public bool DatosNoticia(ref int idNoticia, ref string titulo, ref string subtitulo, ref string plataforma, ref string juego, ref string idCreador, ref DateTime fechaReg)
        {
            bool resultado = false;

            SqlConnection c = null;
            string select = "";
            select += "SELECT titulo, subtitulo, idCreador, idPlataforma, idJuego, FechaReg ";
            select += "FROM Noticia ";
            select += "WHERE id = " + idNoticia;

            try
            {
                c = new SqlConnection(cadConexion);
                c.Open();
                SqlCommand command = new SqlCommand(select, c);
                SqlDataReader dr = command.ExecuteReader();
                if (dr.Read())
                {
                    resultado = true;
                    titulo = dr["titulo"].ToString();
                    subtitulo = dr["subtitulo"].ToString();
                    plataforma = dr["idPlataforma"].ToString();
                    juego = dr["idJuego"].ToString();
                    idCreador = dr["idCreador"].ToString();
                    fechaReg = DateTime.Parse(dr["FechaReg"].ToString());                            
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                c.Close();
            }

            return resultado;  
        }

        /// <summary>
        /// Funcion para obtener la id de la ultima
        /// </summary>
        /// <returns>
        /// Devuelve la id de la ultima noticia</returns>
        public int UltimoID()
        {
            int resultado = 0;
            SqlConnection c = null;
            string select = "";
            select += "SELECT TOP (1) id ";
            select += "FROM Noticia ";
            select += "ORDER BY id DESC";
            try
            {
                c = new SqlConnection(cadConexion);
                c.Open();
                SqlCommand command = new SqlCommand(select, c);
                SqlDataReader dr = command.ExecuteReader();
                if (dr.Read())
                {
                    resultado = int.Parse(dr["id"].ToString());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                c.Close();
            }
            return resultado;
        }

        /// <summary>
        /// Funcion para comprobar si existe una noticia
        /// </summary>
        /// <param name="id">
        /// Número de noticia de la que queremos comprobar su existencia</param>
        /// <returns>
        /// Devuelve verdadero en caso de que exista</returns>
        public bool Existe(int id)
        {
            bool resultado = false;
            SqlConnection c = null;
            string select = "";
            select += "SELECT id ";
            select += "FROM Noticia ";
            select += "WHERE id = " + id;
            try
            {
                c = new SqlConnection(cadConexion);
                c.Open();
                SqlCommand command = new SqlCommand(select, c);
                SqlDataReader dr = command.ExecuteReader();
                if (dr.Read())
                {
                    resultado = true;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                c.Close();
            }
            return resultado;
        }

        /// <summary>
        /// Funcion para obtener las noticias de una plataforma
        /// </summary>
        /// <param name="plataforma">
        /// Plataforma de la que queremos obtener las noticias</param>
        /// <returns>
        /// Devuelve el DataSet con las noticias de la plataforma</returns>
        public DataSet ObtenerNoticiasdePlataforma(string plataforma)
        {
            DataSet resultado = new DataSet();
            string select = "";

            try
            {
                select += "SELECT   id, titulo, subtitulo, idJuego, idCreador, FechaReg ";
                select += "FROM     Noticia ";
                select += "WHERE    idPlataforma = '" + plataforma + "' ";
                select += "ORDER BY FechaReg DESC";

                resultado = ObtenerDatos(select, "Noticia");

            }
            catch (Exception ex)
            {
                throw ex;
            }
            return resultado;
        }

        /// <summary>
        /// Funcion para insertar una noticia
        /// </summary>
        /// <param name="titulo">
        /// Titulo de la noticia</param>
        /// <param name="subtitulo">
        /// Subtitulo de la noticia</param>
        /// <param name="idCreador">
        /// Creador de la noticia</param>
        /// <param name="idPlataforma">
        /// Plataforma de la noticia</param>
        /// <param name="idJuego">
        /// Juego de la que queremos obtener las noticias</param>
        /// <returns>
        /// Devuelve true si ha insertado la noticia</returns>
        public bool NuevaNoticia(string titulo, string subtitulo, string idCreador, string idPlataforma, string idJuego)
        {
            bool resultado = false;

            SqlConnection conexion = null;
            SqlTransaction tr = null;
            SqlCommand comandoSql = null;
            string insert = "";

            try
            {
                conexion = new SqlConnection(cadConexion);
                conexion.Open();
                tr = conexion.BeginTransaction();

                DateTime FechaReg = DateTime.Now;

                insert = "INSERT INTO Noticia (titulo, subtitulo, idCreador, idPlataforma, idJuego, FechaReg) ";
                insert += "VALUES ('" + titulo + "', '" + subtitulo + "', '" + idCreador + "', '" + idPlataforma + "', ";
                if (idJuego == "")
                    insert += "Null, '";
                else
                    insert += idJuego + "', '"; 
                    
                insert += FechaReg + "')";

                comandoSql = new SqlCommand(insert, conexion);
                comandoSql.Transaction = tr;
                comandoSql.ExecuteNonQuery();

                tr.Commit();
                resultado = true;
            }
            catch (Exception ex)
            {
                tr.Rollback();
                throw ex;
            }
            finally
            {
                if (conexion != null)
                    conexion.Close();
            }
            return resultado;
        }

        /* FIN JAVI*/

        /*_____________________________________Métodos Mirellys_________________________________________*/
        /// <summary>
        /// ObtenerXNoticias
        /// </summary>
        /// <param name="cantNoticias">cantidad de noticias a buscar</param>
        /// <returns>DataSet de noticias</returns>
            public DataSet ObtenerXNoticias(int cantNoticias)
        {
            DataSet resultado = null;
            string select = "";
            
            try
            {
                select += "SELECT  TOP("+cantNoticias+") id , titulo, subtitulo, idPlataforma as plataforma, idJuego as juego, FechaReg as fecha ";
                select += "FROM Noticia ORDER BY FechaReg DESC";


                resultado = ObtenerDatos(select, "XNoticias");
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return resultado;
        
        }
    }
}